package com.Reporte_Venta;

import java.util.Calendar;
import java.util.concurrent.ExecutionException;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.ClasesGraficas.VentasN3;
import com.Generales.R;
import com.Generales.login;
import com.JSON.JSONParser_Final;
import com.Reporte_Evolutivo.RE_1_Tipo_Eventos;

import android.app.ActionBar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Venta_Canal_Nivel3 extends Activity
{
	private static String urlVentasAnuales = "http://200.16.7.112:3000/reports_management/report/ventasAnualesCanal";
	private static String urlVentasMensuales = "http://200.16.7.112:3000/reports_management/report/ventasMensualesCanal";
	private static String urlVentasTrimestrales = "http://200.16.7.112:3000/reports_management/report/ventasTrimestralesCanal";
	private JSONArray auxJson = null;
	
	/*** FLAGS o PARAMETROS PASADOS ***/
	private int tipoNivel3 = 0; //Depende de que tipo de tercer nivel se quiera. 1 = tipoEvento, 2 = Canal, 3 = RangoEdad
	
	private int flagTiempo = 0; // 1=mes, 2=trimenstre, 3=ano
	private int flagLima = 0;
	private int flagProvincia = 0;
	
    private int anhoInicio;
    private int mesInicio;
    private int diaInicio;

    private int anhoFin;
    private int mesFin;
    private int diaFin;
    
    private String canal;
    private String periodo;
    private int idcanal;
	
	/*** GRAFICA ***/
	private GraphicalView mChartView = null;
	private LinearLayout layoutGrafica = null;
	private String tituloGrafica = "";
	private double[] valoresPie;
	private String[] titulos;
    
    /*** PARAMETROS USADOS EN LA ClASES ***/
	private TextView fechaInicio;
    private TextView fechaFin;
    private View view;
    
    static final int DATE_DIALOG_Inicial = 0;
    static final int DATE_DIALOG_Final = 1;
    
    private String idUsuario;
    private String nombreUser;
    private int idperfil;
	
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ventas);
		
		this.inicializaFlags();
		this.inicializaFechaCanal();
		
		nombreUser = this.getIntent().getExtras().getString("nombreUser");
		idUsuario = this.getIntent().getExtras().getString("idUsuario");
		idperfil = this.getIntent().getExtras().getInt("idperfil");
		
		/*** ACTION BAR ***/
		Resources res = getResources();
		Drawable myImage = res.getDrawable(R.drawable.background2);		
		ActionBar actionBar = this.getActionBar();
		actionBar.setBackgroundDrawable(myImage);
		actionBar.setDisplayUseLogoEnabled(true);
		actionBar.setDisplayShowTitleEnabled(true);
		actionBar.setTitle(nombreUser);
		
		/*** DISENO DE PANTALLA ***/
		acomodarPantalla(); //Quitar y deshabilitar botones
		setColorTiempo();
		setColorUbicacion();
		
		GenerarReporte(view);
	}
	
	private void GenerarReporte(View view) 
	{
		String columna = "";
		String ubicacion = "";
		if (flagLima == 1 && flagProvincia != 1)
			ubicacion = "lima";
		if (flagLima != 1 && flagProvincia == 1)
			ubicacion = "provincias";
		
		VentasN3 ventasNivel3 = new VentasN3();
		
		if (flagTiempo == 3) //ANUAL
		{
			
			String url = urlVentasAnuales;
			tituloGrafica = "Ventas por el canal: " + canal;
			
			if (tipoNivel3 == 1){url += "Tipo"; tituloGrafica +=  " y por Tipos de Evento " + periodo; columna = "nomtipoevento";}
			else if (tipoNivel3 == 2) {url += "Edad"; tituloGrafica +=  " y por Rango de Edades " + periodo;columna = "nomrango";}
			else if (tipoNivel3 == 3) {url += "Genero"; tituloGrafica +=  " y por Genero " + periodo;columna = "nomSexo";}
			
			if (ubicacion.equals(""))
				url += "Ambos/";
			else
				url += "/";
			url += periodo + "/" + idcanal;
			if (ubicacion.equals(""))
				url +=  ".json";
			else
				url += "/" + ubicacion + ".json";
			auxJson = returnJnConsultas(url);
			
			if (auxJson != null)
			{
				if (auxJson.length() != 0)
				{
					try
					{
						this.valoresPie = new double[auxJson.length()];
						this.titulos = new String[auxJson.length()];
						for (int i = 0; i < auxJson.length(); i++)
						{
							JSONObject jsonItem = auxJson.getJSONObject(i);
					        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
					        valoresPie[i] =jsonItem1.getDouble("Monto");
					        titulos[i] = jsonItem1.getString(columna);
						}
						
						ventasNivel3.ejecutar(valoresPie,tituloGrafica,titulos);
						ocultaPanel();
						
						this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
						mChartView = ChartFactory.getPieChartView(Venta_Canal_Nivel3.this, ventasNivel3.getSeries(), ventasNivel3.getmRenderer());
						layoutGrafica.removeAllViews();
					    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
						               LayoutParams.FILL_PARENT));
						
						Toast.makeText(this, "Se genera el reporte", Toast.LENGTH_SHORT).show();
					}catch (JSONException e) { e.printStackTrace();}
				}
				else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
			}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
		}
		
		if (flagTiempo == 1) //Mensual
		{
			String url = urlVentasMensuales;
			tituloGrafica = "Ventas por el canal: " + canal;
			
			if (tipoNivel3 == 1){url += "Tipo"; tituloGrafica +=  " y por Tipos de Evento " + periodo; columna = "nomtipoevento";}
			else if (tipoNivel3 == 2) {url += "Edad"; tituloGrafica +=  " y por Rango de Edades " + periodo;columna = "nomrango";}
			else if (tipoNivel3 == 3) {url += "Genero"; tituloGrafica +=  " y por Genero " + periodo;columna = "nomSexo";}
			
			if (ubicacion.equals(""))
				url += "Ambos/";
			else
				url += "/";
			url += periodo + "/" + idcanal;
			if (ubicacion.equals(""))
				url +=  ".json";
			else
				url += "/" + ubicacion + ".json";
			auxJson = returnJnConsultas(url);
			
			if (auxJson != null)
			{
				if (auxJson.length() != 0)
				{
					try
					{
						this.valoresPie = new double[auxJson.length()];
						this.titulos = new String[auxJson.length()];
						for (int i = 0; i < auxJson.length(); i++)
						{
							JSONObject jsonItem = auxJson.getJSONObject(i);
					        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
					        valoresPie[i] =jsonItem1.getDouble("Monto");
					        titulos[i] = jsonItem1.getString(columna);
						}
						
						ventasNivel3.ejecutar(valoresPie,tituloGrafica,titulos);
						ocultaPanel();
						
						this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
						mChartView = ChartFactory.getPieChartView(Venta_Canal_Nivel3.this, ventasNivel3.getSeries(), ventasNivel3.getmRenderer());
						layoutGrafica.removeAllViews();
					    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
						               LayoutParams.FILL_PARENT));
						
						Toast.makeText(this, "Se genera el reporte", Toast.LENGTH_SHORT).show();
					}catch (JSONException e) { e.printStackTrace();}
				}
				else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
			}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
		}
		
		if (flagTiempo == 2) //Trimestral
		{
			String url = urlVentasTrimestrales;
			tituloGrafica = "Ventas por el canal: " + canal;
			
			if (tipoNivel3 == 1){url += "Tipo"; tituloGrafica +=  " y por Tipos de Evento " + periodo; columna = "nomtipoevento";}
			else if (tipoNivel3 == 2) {url += "Edad"; tituloGrafica +=  " y por Rango de Edades " + periodo;columna = "nomrango";}
			else if (tipoNivel3 == 3) {url += "Genero"; tituloGrafica +=  " y por Genero " + periodo;columna = "nomSexo";}
			
			if (ubicacion.equals(""))
				url += "Ambos/";
			else
				url += "/";
			url += periodo + "/" + idcanal;
			if (ubicacion.equals(""))
				url +=  ".json";
			else
				url += "/" + ubicacion + ".json";
			auxJson = returnJnConsultas(url);
			
			if (auxJson != null)
			{
				if (auxJson.length() != 0)
				{
					try
					{
						this.valoresPie = new double[auxJson.length()];
						this.titulos = new String[auxJson.length()];
						for (int i = 0; i < auxJson.length(); i++)
						{
							JSONObject jsonItem = auxJson.getJSONObject(i);
					        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
					        valoresPie[i] =jsonItem1.getDouble("Monto");
					        titulos[i] = jsonItem1.getString(columna);
						}
						
						ventasNivel3.ejecutar(valoresPie,tituloGrafica,titulos);
						ocultaPanel();
						
						this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
						mChartView = ChartFactory.getPieChartView(Venta_Canal_Nivel3.this, ventasNivel3.getSeries(), ventasNivel3.getmRenderer());
						layoutGrafica.removeAllViews();
					    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
						               LayoutParams.FILL_PARENT));
						
						Toast.makeText(this, "Se genera el reporte", Toast.LENGTH_SHORT).show();
					}catch (JSONException e) { e.printStackTrace();}
				}
				else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
			}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
		}
	}

	private void ocultaPanel()
	{
		LinearLayout ll7 = (LinearLayout)findViewById(R.id.lytOpciones);
		ll7.setVisibility(View.GONE);
	}
	
	private void muestraPanel()
	{
		LinearLayout ll7 = (LinearLayout)findViewById(R.id.lytOpciones);
		if (ll7.getVisibility()== View.VISIBLE)
			ll7.setVisibility(View.GONE);
		else
			ll7.setVisibility(View.VISIBLE);
	}
	
	/***METODOS DEL JSON****/
	
	private JSONArray returnJnConsultas(String url) {
		JSONArray array = null;
		try {
			array = (new JSONParser_Final().execute(url)).get(); //SE OBTIENE LOS OBJ DEL JSON
		} catch (Exception e) {
			Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
		}
		return array;
	}
	
	/*** INCIALIZA FECHA ***/
	private void inicializaFechaCanal()
	{	
		fechaInicio = (TextView) findViewById(R.id.fechaInicio);
		fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio +1) + "/"+ anhoInicio);
		fechaFin = (TextView) findViewById(R.id.fechaFin);
		fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin +1) + "/"+ anhoFin);
	}
	
	/*** FECHAS ***/
	protected Dialog onCreateDialog(int id)
	{
		switch (id)
		{
			case DATE_DIALOG_Inicial:
				DatePickerDialog dialogoInicio =new DatePickerDialog(this, mDateSetListenerInicio, anhoInicio, mesInicio, diaInicio);
				dialogoInicio.getDatePicker();
				return dialogoInicio;
			case DATE_DIALOG_Final:
				DatePickerDialog dialogoFin =new DatePickerDialog(this, mDateSetListenerFin, anhoFin, mesFin, diaFin);
				dialogoFin.getDatePicker();
				return dialogoFin;
		}
		
		return null;
	}
	 
	/*** FECHA INICIO***/
	private DatePickerDialog.OnDateSetListener mDateSetListenerInicio = new DatePickerDialog.OnDateSetListener()
		{
			public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
			{
				anhoInicio = year;
				mesInicio = monthOfYear;
				diaInicio = dayOfMonth;
				fechaInicio = (TextView) findViewById(R.id.fechaInicio);
				fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio + 1) + "/"+ anhoInicio);
			}
		};
	
	/*** FECHA FIN ***/
	private DatePickerDialog.OnDateSetListener mDateSetListenerFin = new DatePickerDialog.OnDateSetListener()
		{
			public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
			{
				anhoFin = year;
				mesFin = monthOfYear;
				diaFin = dayOfMonth;
				fechaFin = (TextView) findViewById(R.id.fechaFin);
				fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin + 1) + "/"+ anhoFin);
			}
		};
	
	/*** PINTADO DE BOTONES ***/
	public void setColorTiempo(){
		
		Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
		Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
		
		Drawable d1 = buttonMensuales.getBackground();
		Drawable d2 = buttonTrimestrales.getBackground();
		Drawable d3 = buttonAnuales.getBackground();
	
		if (flagTiempo==1)
			d1.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
		else if (flagTiempo==2)
			d2.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
		else if (flagTiempo==3)
			d3.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
	}
	
	public void setColorUbicacion()
	{
		Button buttonLima = (Button) findViewById(R.id.buttonLima);
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
		Drawable d1 = buttonLima.getBackground();
		Drawable d2 = buttonProvincia.getBackground();
		
		if (flagLima == 1)
			d1.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
    	else
    	{
    		buttonLima.invalidateDrawable(d1);
    		d1.clearColorFilter();
    	}
		if(flagProvincia==1)
            d2.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
		else
		{
			buttonProvincia.invalidateDrawable(d2);
            d2.clearColorFilter();
		}
	}
	
	/*** INICIALIZACION DE FLAG ***/
	private void inicializaFlags()
	{
		tipoNivel3 = this.getIntent().getExtras().getInt("tipoNivel3");
		canal = this.getIntent().getExtras().getString("canal");
		idcanal = this.getIntent().getExtras().getInt("idcanal");
		periodo = this.getIntent().getExtras().getString("periodo");
		
		flagLima= this.getIntent().getExtras().getInt("flagLima");
		flagProvincia= this.getIntent().getExtras().getInt("flagProvincia");
		flagTiempo= this.getIntent().getExtras().getInt("flagTiempo");
		
		anhoInicio= this.getIntent().getExtras().getInt("anhoInicio");
		mesInicio= this.getIntent().getExtras().getInt("mesInicio");
		diaInicio= this.getIntent().getExtras().getInt("diaInicio");
		
		diaFin= this.getIntent().getExtras().getInt("diaFin");
		mesFin= this.getIntent().getExtras().getInt("mesFin");
		anhoFin= this.getIntent().getExtras().getInt("anhoFin");
	}
	
	/*** DISENO DE PANTALLA ***/
	private void acomodarPantalla()
	{
		LinearLayout layoutVista = (LinearLayout) findViewById(R.id.idpanelgraficovista);
		LinearLayout layoutVistaTxt = (LinearLayout) findViewById(R.id.idpanelgraficovistatxt);

		Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
		Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
		Button buttonLima = (Button) findViewById(R.id.buttonLima);
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
		Button ButtonInicio = (Button) findViewById(R.id.ButtonInicio);
		Button ButtonFin = (Button) findViewById(R.id.ButtonFin);
		Button button2 = (Button) findViewById(R.id.button2);

		layoutVistaTxt.setVisibility(View.GONE);
		layoutVista.setVisibility(View.GONE);
		
		buttonMensuales.setEnabled(false);
		buttonAnuales.setEnabled(false);
		buttonTrimestrales.setEnabled(false);
		buttonLima.setEnabled(false);
		buttonProvincia.setEnabled(false);
		ButtonInicio.setEnabled(false);
		ButtonFin.setEnabled(false);
		button2.setEnabled(false);
	}
	
	@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menuprincipal, menu);
        return true;
    }
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    // Handle item selection
	    switch (item.getItemId()) {
	        case R.id.logout:
	        	Intent logo = new Intent(this,login.class);
	        	startActivity(logo);
	            return true;
	        case android.R.id.home:
	        	muestraPanel();
	            return true;
	        case R.id.menuPrincipal:
	        	Intent menu = new Intent(this,com.Generales.Menu.class);
	        		        	
	        	menu.putExtra("codigo","");
	        	menu.putExtra("nombreUser",nombreUser);
	        	menu.putExtra("idPromotor",idUsuario);
	        	menu.putExtra("idperfil", idperfil);
	        	startActivity(menu);
	            return true;
	        default:
	            return super.onOptionsItemSelected(item);
	    }
	}	
}
